package com.lyf.scm.plan.domain.remote.item;

import com.github.pagehelper.PageInfo;
import com.lyf.scm.plan.api.dto.CategoryBaseInfoDTO;
import com.lyf.scm.plan.domain.remote.item.dto.*;
import com.rome.arch.core.clientobject.Response;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * description:
 * 商品中心远程调用
 *
 * @author: haodong
 * @data: 2020/7/18 14:07
 */
@FeignClient(name = "item-core")
public interface ItemCoreRemote {

    /**
     * 调商品中心获取换算比例
     *
     * @param skuCodeList
     * @param skuUintType
     * @return
     */
    @PostMapping("/api/v1/item/external/skuUnitBySkuCodesAndSkuUintType")
    Response<List<SkuUnitDTO>> getSkuUnit(@RequestBody List<String> skuCodeList, @RequestParam("skuUintType") Long skuUintType);

    /**
     * 调商品中心获取skuInfo
     *
     * @param skuCodeList
     * @return
     */
    @PostMapping("/api/v1/item/external/skuListBySkuCodes")
    Response<List<SkuInfoDTO>> listSkuInfoByCodes(@RequestBody List<String> skuCodeList);

    /**
     * sku sku码列表
     * 根据sku查到商品详情
     *
     * @param skuCodeList sku编码
     * @return {@link Response<List< SkuInfoDTO >>}
     */
    @PostMapping("/api/v1/item/sku/kp/skuListBySkuCodes")
    Response<List<SkuInfoDTO>> skuListBySkuCodes(@RequestBody List<String> skuCodeList);

    /**
     * 根据商品code集合获取对应品类id集合
     *
     * @param pageNum
     * @param pageSize
     * @param skuCodes
     * @return
     */
    @PostMapping("api/v1/item/sku/external/skuCodesAndSkuName")
    Response<PageInfo<SkuInfosDTO>> getAllCategoryIdBySkuCode(@RequestParam("pageNum") Integer pageNum,
                                                              @RequestParam("pageSize") Integer pageSize,
                                                              @RequestBody List<String> skuCodes);


    /**
     * 根据品类id集合获取对应品类信息集合
     *
     * @param ids
     * @return
     */
    @PostMapping("/api/v1/item/category/kp/selectCategoryByIds")
    Response<List<CategorySimpleDTO>> getAllCategoryByCategoryId(@RequestBody List<Integer> ids);

    /**
     * 批量通过categoryCodes查询后台类目信息
     *
     * @param categoryCodes 分类码
     * @return {@link Response<List<CategoryDTO>>}
     */
    @PostMapping("/api/v1/item/external/categoryListByCategoryCodes")
    Response<List<CategoryDTO>> categoryListByCategoryCodes(@RequestBody List<Long> categoryCodes);

    /**
     * 根据品类的code查询后台类目信息(包括下一级类目的信息)
     *
     * @param stringList 字符串列表
     * @return {@link Response<List<CategoryBaseInfoDTO>>}
     */
    @PostMapping("/api/v1/item/external/categoryListByCategoryCodes")
    Response<List<CategoryBaseInfoDTO>> listByCategoryCodes(@RequestBody List<String> stringList);

    /**
     * 批量通过skuCode和单位名称查询基础单位换算关系
     *
     * @param params
     * @param pageNum
     * @return
     */
    @PostMapping("api/v1/item/external/unitsBySkuCodeAndUnitNameAndMerchantId")
    Response<PageInfo<SkuUnitDTO>> getUtilInfoBySkuCode(@RequestBody List<UnitCodeExtParamDTO> params, @RequestParam("pageNum") Integer pageNum);

    /**
     * 批量根据skuCode，channelCode，UnitCode批量查询当前时间价格
     *
     * @param searchPriceParamDTOS 搜索价格参数dto
     * @return {@link Response<List<SkuSalePriceResultDTO>>}
     */
    @PostMapping("/api/v1/item/sku/price/external/selectSalePrice")
    Response<List<SkuSalePriceResultDTO>> selectSalePrice(@RequestBody List<SearchPriceParamDTOS> searchPriceParamDTOS);


    /**
     * 通过渠道代码sku列表页面
     *
     * @param channelCode 信道编码
     * @param pageNum     页面num
     * @param pageSize    页面大小
     * @return {@link Response<PageInfo<SkuUnitDTO>>}
     */
    @GetMapping("/api/v1/item/external/skuListPageByChannelCode")
    Response<PageInfo<SkuUnitDTO>> skuListPageByChannelCode(@RequestParam("channelCode") String channelCode,
                                                            @RequestParam("pageNum") Integer pageNum,
                                                            @RequestParam("pageSize") Integer pageSize);

    /**
     * 批量通过skuCodes与skuUintType查询sku单位信息
     *
     * @param skuCodes
     * @return
     */
    @PostMapping("api/v1/item/external/skuUnitBySkuCodesAndSkuUintType")
    Response<List<SkuUnitExtDTO>> getSkuUnitByCodeAndType(@RequestBody List<String> skuCodes, @RequestParam("skuUintType") Integer skuUintType);

    /**
     * 查询全量的sku信息，只返回skuid,code(默认只查单品)
     *
     * @param type
     * @return
     */
    @GetMapping("api/v1/item/sku/selectAllSkuField")
    Response<List<SkuIdCodeDTO>> selectAllSkuField(@RequestParam(value = "type", defaultValue = "1") String type);


    /**
     * 根据业务类型和skucodes查询标签
     *
     * @param skuCodes sku码
     * @param type     类型
     * @return {@link Response<List<TagSkuInfoDTO>>}
     */
    @PostMapping("/api/v1/item/external/getSkuTagGroupBySkuCodes")
    Response<List<TagSkuInfoDTO>> getSkuTagGroupBySkuCodes(@RequestBody List<String> skuCodes, @RequestParam("type") Integer type);

    /**
     * 根据sku+渠道+单位 查询价格
     * @param skuPriceDTOList
     * @return
     */
    @PostMapping("/api/v1/item/external/salePricesBySkuCodesAndChannelCodesAndSaleUnitCodes")
    Response<PageInfo<SkuPriceDTO>> getPriceBySkuCodeList(@RequestBody List<SkuPriceDTO> skuPriceDTOList);
}
